/**
利用HD钱包（比特币协议 BIP32 BIP44 BIP39）批量生成钱包

BIP44为BIP32的衍生路径提供了一套通用规范，适配比特币、以太坊等多链。这一套规范包含六级，每级之间用"/"分割：

m / purpose' / coin_type' / account' / change / address_index
其中：

m: 固定为"m"
purpose：固定为"44"
coin_type：代币类型，比特币主网为0，比特币测试网为1，以太坊主网为60
account：账户索引，从0开始。
change：是否为外部链，0为外部链，1为内部链，一般填0.
address_index：地址索引，从0开始，想生成新地址就把这里改为1，2，3。
 */

import {ethers} from "ethers"

// 生成随机助记词
const mnemonic = ethers.Mnemonic.entropyToPhrase(ethers.randomBytes(32))
// marble three stumble field evoke old celery air vessel flavor model capable rabbit chalk disease tuition immense olympic liquid tissue stumble undo interest peace

// 创建HD基钱包
// 基路径："m / purpose' / coin_type' / account' / change"
const basePath = "44'/60'/0'/0"
const baseWallet = ethers.HDNodeWallet.fromPhrase(mnemonic, basePath)
console.log(baseWallet)

let wallets = []
for(let i = 0; i< 20; i++){
    let baseWalletNew = baseWallet.derivePath(i.toString())
    console.log(`${baseWalletNew.address}`)
    wallets.push(baseWalletNew)
}

// 钱包加密json
let wallet = ethers.Wallet.fromPhrase(mnemonic)
const pwd = 'pinkstar0121'
const walletJson = await wallet.encrypt(pwd)
console.log(walletJson)

// 解密
wallet = await ethers.Wallet.fromEncryptedJson(walletJson, pwd)
console.log(wallet)
